<?php
  /**
   * @author EVANDRO DE OLIVEIRA.
   * @category MODEL
   * @package MODELS.
   * @since 17/03/2012.
   * @last_update 24/03/2012.
   * @copyright 2012.
   * @version 1.0.
   *
   */
  class Application_Model_Parcelas extends Zend_Db_Table_Abstract{
    const IND_ATIVO = 1;
    const IND_INATIVO = 0;
    
    /* Seta a tabela a ser usada*/
    protected function _setup(){
      $this->_name = 'parcelas';
      
      parent::_setup();
    }
    
    /**
     * Retorna a string SELECT como todos os campos solicitados por parametro.
     * @param array Array com as opções de colunas e clausulá WHERE.
     *              Ex: Colunas:
     *                  $arrOptions['fields_perfil'] = array('campo1', 'campo2', 'campoN').
     *                  
     *                  WHERE
     *                    $arrOptions['where_clause'] = array('ds_peril' => 'usuario')
     * @param string  Comparação.Ex: =, LIKE NOT LIKE, etc  
     *                    
     * @return string                   
     */
    public function _get($arrOptions = array(), $strComparison = '='){
      $arrAlias     = array('p' => $this->_name);
      
      if(isset($arrOptions['fields']))
        $arrCols = $arrOptions['fields'];
      else
        $arrCols = array('p.*');
          
      $strSql = $this->getAdapter()
      ->select()
      ->from($arrAlias, $arrCols)
      ->where('p.ds_situacao = ?', self::IND_ATIVO)
      ;
      
      if(isset($arrOptions['where_clause']))
        foreach($arrOptions['where_clause'] as $strkey => $strValue)
          $strSql->where($strkey . $strComparison . ' ?', $strValue);  
      $strSql->order('p.idParcela');
      
      return $strSql;
    }
    
    /**
     * Retorna o registro
     * 
     * @param integer Id do registro
     * @return databasen result
     */
    public function get($intId = null){
      if($intId == null)
        return false;
      
      $arrOptions['fields'] = array(
        'p.idParcela',
        'p.ds_parcela',
        'p.nr_parcela',
        'p.nr_valor_parcela',
        'p.nr_valor_desconto',
        'p.nr_prazo_desconto',
        'p.nr_prazo_vencimento_parcela',
        'p.nr_multa_atraso_parcela',
        'p.nr_juros_atraso_parcela',
        'p.ds_situacao',  
      );
      
      $arrOptions['where_clause'] = array(
        'p.idParcela'  => $intId   
      );
      
      $strSql = $this->_get($arrOptions);  
        
      $objResult = $this->getAdapter()->fetchAll($strSql);
        
      return Core_Commons::onLoad($objResult);
    }
    
    public function getAtivos(){
      $strSql = $this->select()->where($this->_name . '.ds_situacao = ?', self::ATIVO);
      
      $objResult = $this->fetchAll($strSql);
      
      return Core_Commons::onLoad($objResult);
    }
    
    public function getByPreco($intIdPreco){
    	$arrOptions['fields'] = array(
        'p.idParcela',
        'p.ds_parcela',
        'p.nr_parcela',
        'p.nr_valor_parcela',
        'p.nr_valor_desconto',
        'p.nr_prazo_desconto',
        'p.nr_prazo_vencimento_parcela',
        'p.nr_multa_atraso_parcela',
        'p.nr_juros_atraso_parcela',
        'p.ds_situacao',  
      );
      
    	$strSql = $this->_get($arrOptions)
    	->join(array('pp' => 'precos_parcelas'), 'pp.idParcela = p.idParcela', array())
    	->join(array('pr' => 'precos'), 'pr.idPreco = pp.idPreco', array())
    	->where('pr.idPreco = ?', $intIdPreco)
    	;
    	
    	return $this->getAdapter()->fetchAll($strSql);
    }
  }
?>      